//**************************************************************
//					新人研修用ソースプログラム	
//**************************************************************
//ファイル名：practice9-2.c						
//**************************************************************

//===========================						
//インクルード
//===========================
#include <stdio.h>

//===========================						
//プロトタイプ宣言
//===========================
void filename_get(char file_name[]);

//**************************************************************************************
//機能名称　：メイン関数
//
//関数名　　：int main(void)
//引数　　　：なし
//戻り値　　：常に0
//機能　　　：コピー元ファイル名からファイルを開き、ファイルの内容を文字列に格納する。
//　　　　　：コピー先ファイル名からファイルを開き、文字列の内容をファイルにコピーする。
//**************************************************************************************	
int main(void){
	FILE* fp;
	char read_file[20] = {'\0'};
	char write_file[20] = {'\0'};	
	
	char filestr[20] = {'\0'};	// ファイルから読み取った文字列格納用
	char row[24] = {'\0'};		// sprintfの書式変換後文字列格納用
	int ret;					// fputsからのリターン値格納用
	/* 読み込みファイル名入力 */;
	printf("読み込むファイル名を入力してください。(拡張子なし)\n");
	filename_get(read_file);
	
	/* 読み込み専用モードでファイルを開く */
	fp = fopen(read_file, "r");
	if( fp == NULL ) {
		printf("ファイルオープンエラー:r\n");
		return -1;
	}
	/* ファイルから各変数に変換して代入 */
	while((ret = fscanf(fp ,"%s", filestr)) != EOF){
		/* 変換して代入された変数を表示 */
		printf( "ファイルから読み込んだデータ\n%s\n" , filestr);
	}
	printf("%s\n",filestr);
	fclose(fp);

	/* 書き込みファイル名入力 */;
	printf("書き込むファイル名を入力してください。(拡張子なし)\n");
	filename_get(write_file);
	
	/* 書き込みモードでファイルを開く */
  	fp = fopen(write_file, "w");
  	if(fp == NULL){
		printf("ファイルオープンエラー:w\n");
		return -1;
	}
	/* ファイルに出力 */
  	/* 意図して改行コード(\n)を挿入 */
	sprintf(row, "%s\n", filestr);
	ret = fputs(row, fp);
	if(ret == EOF){
		printf("ファイル出力エラー\n");
		return -1;
	  }
    /* ファイルクローズ */
    fclose(fp);

	return 0;
}

//*********************************************************************
//機能名称　：ファイル名取得関数
//
//関数名　　：void filename_get(char file_name[])
//引数　　　：char file_name[]
//戻り値　　：なし
//機能　　　：標準入力からファイル名を入力させて、ファイル名の後ろに
//　　　　　：.txtを追加する。
//*********************************************************************	
void filename_get(char file_name[]){
	char copy_name[25] = {'\0'};
	char* line_change = NULL;			// 改行文字削除用
	char* add_extension = NULL;			// 拡張子追加用
	char extension[5] = ".txt\0";
	int copy_i = 0;
	
	fgets(copy_name,sizeof(copy_name),stdin);
	// 改行文字削除
	for(line_change = copy_name; *line_change != '\n'; line_change++);
	// 演算子追加
	add_extension = extension;
	while(*add_extension != '\0'){
		*line_change = *add_extension;
		line_change++;
		add_extension++;
	}
	// ヌル文字追加
	*line_change = '\0';
	printf("%s\n", copy_name);
	
	copy_i = 0;
	while(copy_name[copy_i] != '\0'){
		file_name[copy_i] = copy_name[copy_i];
		copy_i++;
	}
}
